Constructores, deserializadores y métodos de inicialización en C#.
Podemos usar atributos especiales en nuestro código con el fin de facilitar RTL trabajo en C#. Como parte de nuestro curso de C# te mencionamos algunos de estos trucos. Para el siguiente ejemplo, debes saber un truco que usan algunos serializadores. Existe una función poco conocida para omitir el constructor de una clase conocido como FormatterServices.GetUninitializedObject. Algunos serializadores, como el DataContractSerializer, usarán esto para mejorar el rendimiento.
¿Qué pasa si necesitas que la lógica del constructor se ejecute siempre? Bueno, ahí es donde entra en juego el atributo OnDeserializing. Este atributo actúa como un constructor sustituto llamado después de GetUninitializedObject.
Para reducir la redundancia y la posibilidad de error, los desarrolladores a menudo usarán un método de inicialización común como se muestra en el ejemplo de código a continuación.
protected AbstractModelBase() { Initialize(); } [OnDeserializing] void _ModelBase_OnDeserializing(StreamingContext context) { Initialize(); } void Initialize() { m_PropertyChangedEventManager = new PropertyChangedEventManager(this); m_Errors = new ErrorsDictionary(); }
Esto se convierte en un problema para el corrector nulo. Dado que las dos variables mencionadas no están establecidas explícitamente en el propio constructor, las marcará como no inicializadas. Lo que significa que se debe realizar un trabajo de copiar y pegar para eliminar el error.
También existe el riesgo de olvidarse de incluir un método de OnDeserializing. Dado que el verificador de nulos no comprende el método de OnDeserializing, no podrá avisarte de la posibilidad de nulos inesperados.
La mayoría de los desarrolladores encuentran que este comportamiento es confuso. Entonces, en .NET Core, el DataContractSerializer llamará al constructor. Pero eso significa que si estás apuntando a .NET Standard debes asegurarte de probar tu código de deserialización con .NET Framework y .NET Core para tener en cuenta los diferentes comportamientos. Recuerda que un curso de Visual Basic puede ayudarte, pues VB es parte de .NET Core.
Adicionalmente puedes tomar un curso de MySQL, con lo que podrás desarrollar aplicaciones basadas en base de datos.